import java.lang.reflect.Array;
import java.util.Comparator;
import java.util.Random;
import java.util.Scanner;
import ArraySorter.*;
public class Test
{
    public static void main(String[] args)
    {

        /**  生成随机学生信息  */
        Scanner key=new Scanner(System.in);
        System.out.println("-----------------对学生类的排序测试(随机生成学生信息)----------------");
        System.out.println("请输入学生人数(将随机生成学生信息):");
        int n=key.nextInt();
        Random rand = new Random();
        student[][] A=new student[5][n];
        System.out.print("\n随机生成的学生信息:\n");
        System.out.println("学生id\t\t\t姓名name\t\t\t成绩");
        String TT="abcdefghijklmnopqrstuvwxyz";
        for(int i=0;i<n;i++)
        {
            //生成随机id
            int id1=rand.nextInt(n*2);
            int wei=n,nums=0;
            while (wei>0) {     nums++;wei/=10;    }
            long id2=(long)(2020*Math.pow(10,nums+1)+id1);
            //生成随机分数score
            int score=rand.nextInt(101);
            //生成随机姓名name
            String a="";
            for(int j=0;j<5;j++)
            {
                int a1 = rand.nextInt(26);
                a=a+TT.charAt(a1);
            }
            System.out.println(id2+"\t\t\t"+a+"\t\t\t"+score);
            A[0][i]=new student(id2,score,a);
            A[1][i]=new student(id2,score,a);
            A[2][i]=new student(id2,score,a);
            A[3][i]=new student(id2,score,a);
            A[4][i]=new student(id2,score,a);

        }



        /**
         测试1 : 归并排序的Comparator接口实现
         */
        ArraySorter.mergeSort.sort(A[0], new Comparator<student>()
        {
            @Override
            public int compare(student o1, student o2)
            {
                if( o1.getId()>o2.getId()) return 1;
                else if(o1.getId()<o2.getId()) return -1;
                else return 0;
            }
        });
        System.out.println("\n归并排序后为（！！！学号id升序！！！）：");
        print(A,0);




        /**
        测试2:归并排序的comparable接口实现
         */
        ArraySorter.mergeSort.sort(A[1]);
        System.out.println("\n归并排序后为（！！！成绩score升序！！！）：");
        print(A,1);



        /**
         测试3 :选择排序的comparator接口实现
               Comparable上次作业已实现
         */
        ArraySorter.selectionSort.sort(A[2], new Comparator<student>() {
            @Override
            public int compare(student o1, student o2) {

                if( o1.getId()>o2.getId()) return -1;
                else if(o1.getId()<o2.getId()) return 1;
                else return 0;
            }
        });
        System.out.println("\n选择排序后为（！！！按学号id降序！！！）：");
        print(A,2);



         /**
         测试4:冒泡排序的Comparator接口实现
              Comparable上次作业已实现
         */
        ArraySorter.bubbleSort.sort(A[3], new Comparator<student>() {
            @Override
            public int compare(student o1, student o2) {

                if( o1.getId()>o2.getId()) return -1;
                else if(o1.getId()<o2.getId()) return 1;
                else return 0;
            }
        });
        System.out.println("\n冒泡排序后为（！！！按学号id降序！！！）：");
        print(A,3);



         /**
         测试5:插入排序的Comparator接口实现
              Comparable上次作业已实现
         */
        ArraySorter.insertionSort.sort(A[4], new Comparator<student>()
        {
            @Override
            public int compare(student o1, student o2) {
                if( o1.getScore()>o2.getScore()) return -1;
                else if(o1.getScore()<o2.getScore()) return 1;
                else return 0;
            }
        });
        System.out.println("\n插入排序后为（！！！按成绩score降序！！！）：");
        print(A,4);

    }



    public static void print(student[][] A,int pos) {
        System.out.println("学生id\t\t\t姓名name\t\t\t成绩score");
        for (int i = 0; i < A[pos].length; i++) {
            System.out.println(A[pos][i].getId() + "\t\t\t" + A[pos][i].getName() + "\t\t\t" + A[pos][i].getScore());
        }
    }
}
